package org.example.onlinejudge.model;

import jakarta.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 权限实体类
 * 负责表示系统中的权限信息
 * 实现逻辑：
 * 1. 使用JPA注解映射到数据库中的permission表
 * 2. 包含权限基本信息：ID、权限代码和权限名称
 * 3. 权限代码采用格式：模块:操作（如user:add, report:export）
 * 4. 通过@ManyToMany(mappedBy = "permissions")建立与Role实体的多对多关系
 * 5. 作为RBAC权限模型中的权限部分，与角色关联形成权限控制体系
 */
@Entity
@Table(name = "permission")
public class Permission {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "perm_code", length = 100)
    private String permCode; // 例如: user:add, report:export, user:delete

    @Column(name = "perm_name", length = 100)
    private String permName; // 例如: 添加用户, 导出报表, 删除用户

    // 多对多关系：权限-角色（反向）
    @ManyToMany(mappedBy = "permissions", fetch = FetchType.EAGER)
    private Set<Role> roles = new HashSet<>();

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getPermCode() {
        return permCode;
    }

    public void setPermCode(String permCode) {
        this.permCode = permCode;
    }

    public String getPermName() {
        return permName;
    }

    public void setPermName(String permName) {
        this.permName = permName;
    }

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}


